package com.dc.wifi.main.utils;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;

import com.dc.wifi.main.DCApplication;

import java.util.concurrent.TimeUnit;

public class SoundPlayer {

    private MediaPlayer mediaPlayer;
    private Handler handler;
    private Runnable playbackTask;
    private long intervalMillis;

    public SoundPlayer() {
        handler = new Handler(Looper.getMainLooper());
        intervalMillis = TimeUnit.SECONDS.toMillis(1); // 默认频率为1次/秒
    }

    /**
     * 初始化MediaPlayer并设置播放资源。
     *
     * @param path 音频文件的路径。
     */
    public void init(int resId) {

        release(); // 释放已有的MediaPlayer资源
//        mediaPlayer = new MediaPlayer();
        try {
//            mediaPlayer.setDataSource(path);
            mediaPlayer = MediaPlayer.create(DCApplication.getInstance(), resId);
//            mediaPlayer.prepare();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置播放频率。
     *
     * @param frequency 播放频率（1-10次/秒）。
     */
    public void setFrequency(int frequency) {
        if (frequency < 1 || frequency > 10) {
            throw new IllegalArgumentException("Frequency must be between 1 and 10");
        }
        intervalMillis = TimeUnit.SECONDS.toMillis(1) / frequency;
    }

    /**
     * 开始播放音频。
     */
    public void play() {
        if (mediaPlayer == null) {
            return;
        }
        if (!mediaPlayer.isPlaying()) {
            mediaPlayer.start();
        }
        // 调度下一次播放任务
        handler.postDelayed(playbackTask, intervalMillis);
    }

    /**
     * 停止播放音频并移除所有待执行的任务。
     */
    public void stop() {
        if (mediaPlayer != null) {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
            handler.removeCallbacks(playbackTask);
        }
    }

    /**
     * 释放MediaPlayer资源。
     */
    public void release() {
        stop();
        if (mediaPlayer != null) {
            mediaPlayer.release();
            mediaPlayer = null;
        }
    }

    // 在MediaPlayer准备好之后设置播放任务
    private void setupPlaybackTask() {
        if (playbackTask == null) {
            playbackTask = new Runnable() {
                @Override
                public void run() {
                    if (mediaPlayer.isPlaying()) {
                        // 如果MediaPlayer正在播放，重新调度下一次播放
                        handler.postDelayed(this, intervalMillis);
                    } else {
                        // 如果MediaPlayer停止了，就不再调度
                        Log.w("SoundPlayer", "MediaPlayer stopped, cancelling playback task.");
                    }
                }
            };
        }
    }

    // 确保在MediaPlayer准备好之后调用这个方法
    public void onPrepared() {
        setupPlaybackTask();
    }
}